import tensorflow as tf
import cv2 #这个库的报名为opencv-python

# 这里定义一个tensorflow读取的图片格式转换为opencv读取的图片格式的函数
# 请注意：
# 在tensorflow中，一个像素点的颜色顺序是R，G，B。
# 在opencv中，一个像素点的颜色顺序是B，G，R。
# 因此，我们循环遍历每一个像素点，将第0位的颜色和第2位的颜色数值换一下即可。
# 第一个参数name：将要显示的窗口名称。
# 第二个参数image：储存图片信息的一个tensor。
def cv2Show(name="",image=None):
    # 获取矩阵信息
    np = image.eval()
    # 获取行数列数
    row, col = len(np), len(np[1])

    # 两重循环遍历
    for i in range(row):
        for j in range(col):
            # 交换数值
            tmp = np[i][j][0]
            np[i][j][0] = np[i][j][2]
            np[i][j][2] = tmp

    # 显示图片
    cv2.imshow(name, np)
    pass

def transferImage():
    with tf.Session() as sess:
        # 以二进制的方式读取图片。
        image_raw_data = tf.gfile.FastGFile("bus.jpg", "rb").read()

        # 按照jpeg的格式解码图片。
        image_data = tf.image.decode_jpeg(image_raw_data)
        # print(sess.run(image_data)) RGB三通道
        # 显示原图片。
        cv2Show("Read by Tensorflow+Dispalyed by Opencv", image_data)

        # # 上下翻转图像
        # up_and_down = tf.image.flip_up_down(image_data)
        # cv2Show("up and down", up_and_down)
        #
        # # 左右翻转图像
        # left_and_right = tf.image.flip_left_right(image_data)
        # cv2Show("left and right", left_and_right)
        #
        # # 沿对角线翻转图像
        # transposed = tf.image.transpose_image(image_data)
        # cv2Show("transposed image", transposed)
        #
        # # 以一定概率上下翻转图像
        # random_up_and_down = tf.image.random_flip_up_down(image_data)
        # cv2Show("random up and down", random_up_and_down)
        #
        # # 以一定概率左右翻转图像
        # random_left_and_right = tf.image.random_flip_left_right(image_data)
        # cv2Show("random left and right", random_left_and_right)

        # #亮度-0.5
        # adjusted1 = tf.image.adjust_brightness(image=image_data,delta=-0.5)
        # cv2Show("brightness -05",adjusted1)
        #
        # #随机亮度调整：max_delta:在[max_delta,max_delta)的范围内随机调整亮度。seed:随机种子
        # adjusted3 = tf.image.random_brightness(image=image_data,max_delta=0.3,seed=None)
        # cv2Show("random brightness",adjusted3)

        # 对比度：同亮度差不多，brightness改为contrast
        # random_cotrast的随机范围是 [lower,upper]. lower非负

        # 色相 hue  API跟亮度调整差不多。

        # 饱和度 saturation API跟亮度调整差不多。

        # 图像标准化 将代表一张图片的三维矩阵中的数字均值变为0，方差变为1
        standardedimage = tf.image.per_image_standardization(image_data)
        print(sess.run(standardedimage))
        cv2Show("standardedimage",standardedimage)

        cv2.waitKey()

if __name__ == "__main__":
    transferImage()
